/*
 * @Author: 0x9DEFA478
 * @Date: 2021-09-16 18:51:20
 * @LastEditTime: 2022-07-10 15:16:04
 * @LastEditors: 0x9DEFA478
 * @Description: 
 * QQ:2652450237
 * ============================================================================================================================================
 * 
 * 
 * 
 *                                                                                               ************      ****************************
 *                                                                                             ************      ****************************  
 *                                                                                           ************      ****************************    
 *                                                                                         ************      ****************************      
 *                                                                                       ************      ************                        
 *                                                                                     ************      ************                          
 *                                                                                   ************      ************                            
 *                                                                                 ************      ************                              
 *                                                                               ************      ************                                
 *                                                                             ************      ************                                  
 *                                                                           ************      ************                                    
 *                                                                         ************      ************                                      
 *                                                                       ************      ************                                        
 *                                                                     ************      ************                                          
 *                                                                   ************      ************                                            
 *                                                                 ************      ************                                              
 *                                                               ************      ************                                                
 *                                                             ************      ************                                                  
 *                                                           ************      ************                                                    
 *                                                         ************      ************                                                      
 *                                                       ************      ************                                                        
 *                                                     ************      ************                                                          
 *                                                   ************      ************                                                            
 *                                                 ************      ************                                                              
 *                                               ************      ************                                                                
 *                                             ************      ************                                                                  
 *                                           ************      ************                                                                    
 *                                         ************      ************                                                                      
 *                                       ************      ************                                                                        
 *                                     ************      ************                                                                          
 *                                   ************      ************                                                                            
 *                                 ************      ************                                                                              
 *                               ************      ************                                                                                
 *                             ************      ************                                                                                  
 *                           ************      ************                                                                                    
 *                         ************      ************                                                                                      
 *       ****************************      ************                                                                                        
 *     ****************************      ************                                                                                          
 *   ****************************      ************                                                                                            
 * ****************************      ************                                                                                              
 * 
 * 
 * 
 * ============================================================================================================================================
 * 
 */
#ifndef __I_W25Q_DualBank_H_
#define __I_W25Q_DualBank_H_




#define vI_W25Q_ID_128                                             0xEF17U
#define vI_W25Q_ID_64                                              0xEF16U
#define vI_W25Q_ID_32                                              0xEF15U
#define vI_W25Q_ID_16                                              0xEF14U
#define vI_W25Q_ID_80                                              0xEF13U




/**
 * @brief 初始化相关IO
 * @return 无
 */
void I_W25Q_DualBank_Init(void);

/**
 * @brief 获取Flash ID
 * @return Flash ID
 */
unsigned int I_W25Q_DualBank_GetID(void);

/**
 * @brief 获取状态寄存器的值
 * @return 状态值
 */
unsigned short I_W25Q_DualBank_GetStatusReg1(void);

/**
 * @brief 获取状态寄存器的值
 * @return 状态值
 */
unsigned short I_W25Q_DualBank_GetStatusReg2(void);

/**
 * @brief 获取状态寄存器的值
 * @return 状态值
 */
unsigned short I_W25Q_DualBank_GetStatusReg3(void);

/**
 * @brief 获取Flash容量
 * @param Size1 将用于存放Flash1的容量
 * @param Size2 将用于存放Flash2的容量
 * @return 无
 */
void I_W25Q_DualBank_GetSize(unsigned int* Size1,unsigned int* Size2);

/**
 * @brief 写状态寄存器
 * @param Value 状态寄存器的值
 * @return 无
 */
void I_W25Q_DualBank_SetStatusReg1(unsigned short Value);

/**
 * @brief 写状态寄存器
 * @param Value 状态寄存器的值
 * @return 无
 */
void I_W25Q_DualBank_SetStatusReg2(unsigned short Value);

/**
 * @brief 写状态寄存器
 * @param Value 状态寄存器的值
 * @return 无
 */
void I_W25Q_DualBank_SetStatusReg3(unsigned short Value);

/**
 * @brief 设置Flash为Quad模式
 * @return 无
 */
void I_W25Q_DualBank_SetQuad(void);




//==============================================================================================================================
//
//       读写操作
//
//==============================================================================================================================

/**
 * @brief 读取数据 FastRead
 * @param DeviceAddress 器件读取起始地址 必须2字节对齐
 * @param Dst 指向用于容纳数据的缓冲区
 * @param Length 读取数据长度 必须为2的倍数
 * @return 无
 */
void I_W25Q_DualBank_ReadData(unsigned int DeviceAddress,unsigned char* Dst,int Length);

/**
 * @brief 读取数据 可不2字节对齐
 * @param DeviceAddress 器件读取起始地址
 * @param Dst 指向用于容纳数据的缓冲区
 * @param Length 读取数据长度
 * @return 无
 */
void I_W25Q_DualBank_ReadData_NoAlign(unsigned int DeviceAddress,unsigned char* Dst,int Length);

/**
 * @brief 写入数据 每次该方法只能写一页范围内的数据
 * @param DeviceAddress 器件读取起始地址 必须2字节对齐
 * @param Src 指向用于写入数据的数据
 * @param Length 写入数据的长度 必须为2的倍数
 * @return 无
 */
void I_W25Q_DualBank_PageProgram(unsigned int DeviceAddress,unsigned char* Src,int Length);

/**
 * @brief 擦除扇区 8KB
 * @param DeviceAddress 扇区地址
 * @return 无
 */
void I_W25Q_DualBank_Erase(unsigned int DeviceAddress);

/**
 * @brief 擦除扇区 64KB
 * @param DeviceAddress 扇区地址
 * @return 无
 */
void I_W25Q_DualBank_64KBErase(unsigned int DeviceAddress);

/**
 * @brief 擦除扇区 128KB
 * @param DeviceAddress 扇区地址
 * @return 无
 */
void I_W25Q_DualBank_128KBErase(unsigned int DeviceAddress);

/**
 * @brief 擦除扇区 整片擦除
 * @return 无
 */
void I_W25Q_DualBank_ChipErase(void);




#endif //__I_W25Q_DualBank_H_
